package br.senai.mb;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;

import br.senai.entidade.Cidade;
import br.senai.entidade.Estado;
import br.senai.modelo.CidadeDAO;
import br.senai.modelo.EstadoDAO;
import br.senai.modelo.impl.CidadeDAOImpl;
import br.senai.modelo.impl.EstadoDAOImpl;

@ManagedBean(name = "cidadeMB")
@ViewScoped
public class CidadeMB extends ManagedBeanBase implements Serializable {

	private static final long serialVersionUID = 1L;

	private Cidade cidade;

	private List<Cidade> cidades;

	private List<SelectItem> estados;

	public CidadeMB() {
		listar();
		carregarEstados();
	}

	private void carregarEstados() {
		EstadoDAO estadoDAO = (EstadoDAO) createPersistence(EstadoDAOImpl.class);
		List<Estado> listaDeEstados = estadoDAO.getLista();
		estados = new ArrayList<SelectItem>();
		estados.add(new SelectItem(null, "Selecione o Estado"));
		for (Estado estado : listaDeEstados) {
			estados.add(new SelectItem(estado, estado.getNome()));
		}
	}

	private void listar() {
		CidadeDAO cidadeDAO = (CidadeDAO) createPersistence(CidadeDAOImpl.class);
		cidades = cidadeDAO.getLista();
	}

	public void salvar(ActionEvent event) {

		if (validarDados()) {
			CidadeDAO cidadeDAO = (CidadeDAO) createPersistence(CidadeDAOImpl.class);
			cidadeDAO.salvar(cidade);
			listar();
			execute("modalForm.hide();");
		}
	}

	private boolean validarDados() {

		if (cidade.getNome() == null || cidade.getNome().isEmpty()) {
			addErrorMessage("Preencha o campo Nome", "");
			return false;
		}

		else if (cidade.getEstado() == null) {
			addErrorMessage("Preencha o campo Estado", "");
			return false;
		}

		return true;
	}

	public void excluir(ActionEvent event) {
		CidadeDAO cidadeDAO = (CidadeDAO) createPersistence(CidadeDAOImpl.class);
		cidadeDAO.remover(Cidade.class, cidade.getId());
	}

	public void novaCidade(ActionEvent event) {
		cidade = new Cidade();
		cidade.setEstado(new Estado());
	}

	public Cidade getCidade() {
		return cidade;
	}

	public void setCidade(Cidade cidade) {
		this.cidade = cidade;
	}

	public List<Cidade> getCidades() {
		return cidades;
	}

	public void setCidades(List<Cidade> cidades) {
		this.cidades = cidades;
	}

	public List<SelectItem> getEstados() {
		return estados;
	}

	public void setEstados(List<SelectItem> estados) {
		this.estados = estados;
	}

}